<?php
// +----------------------------------------------------------------------
// | Author: July
// +----------------------------------------------------------------------
// | 创建时间: 2023-12-27 20:39:42
// +----------------------------------------------------------------------
// | Ueditor编辑器上传控制器
// +----------------------------------------------------------------------

namespace july\julyadmin\admin\controller;

use july\julyadmin\common\model\Config;

class Ueditor extends Common
{
    //不需要登录验证的控制器和方法，如：['index']
    protected $noNeedLogin = [];
    //不需要权限验证的控制器和方法，如：['index']
    protected $noPermissionAuth = ['*'];

    public $config;

    public function __construct()
    {
        date_default_timezone_set("Asia/Chongqing");
        error_reporting(E_ERROR);
        header("Content-Type: text/html; charset=utf-8");
        $imageConfig                    = Config::config('ImageUpload');
        $imageConfig['imageAllowFiles'] = explode(',', $imageConfig['imageAllowFiles']);
        if ($imageConfig) {
            array_walk($imageConfig['imageAllowFiles'], function (&$value, $key) {
                $value = '.' . $value;
            });
        }
        $fileConfig                   = Config::config('FileUpload');
        $fileConfig['fileAllowFiles'] = explode(',', $fileConfig['fileAllowFiles']);
        if ($fileConfig) {
            array_walk($fileConfig['fileAllowFiles'], function (&$value, $key) {
                $value = '.' . $value;
            });
        }
        $this->config = [
            /* 前后端通信相关的配置,注释只允许使用多行方式 */
            /* 上传图片配置项 */
            "imageActionName"     => "uploadimage", /* 执行上传图片的action名称 */
            "imageFieldName"      => $imageConfig['imageFieldName'], /* 提交的图片表单名称 */
            "imageMaxSize"     => $imageConfig['imageMaxSize'], /* 上传大小限制，单位B */
            "imageAllowFiles" => $imageConfig['imageAllowFiles'], //array(".png", ".jpg", ".jpeg"), /* 上传图片格式显示 */
            "imageCompressEnable" => false, /* 是否压缩图片,默认是true */
            "imageCompressBorder" => 1600, /* 图片压缩最长边限制 */
            "imageInsertAlign" => "none", /* 插入的图片浮动方式 */
            "imageUrlPrefix"  => "", /* 图片访问路径前缀 */
            "imagePathFormat" => $imageConfig['imagePathFormat'], /* 上传保存路径,可以自定义保存路径和文件名格式 */
            /* {filename} 会替换成原文件名,配置这项需要注意中文乱码问题 */
            /* {rand:6} 会替换成随机数,后面的数字是随机数的位数 */
            /* {time} 会替换成时间戳 */
            /* {y} 会替换成四位年份 */
            /* {m} 会替换成两位月份 */
            /* {d} 会替换成两位日期 */
            /* {h} 会替换成两位小时 */
            /* {i} 会替换成两位分钟 */
            /* {s} 会替换成两位秒 */
            /* 非法字符 \ =>* ? " < > | */
            /* 具请体看线上文档=>fex.baidu.com/ueditor/#use-format_upload_filename */

            /* 截图工具上传 */
            "snapscreenActionName" => "uploadimage", /* 执行上传截图的action名称 */
            "snapscreenPathFormat" => $imageConfig['imagePathFormat'], /* 上传保存路径,可以自定义保存路径和文件名格式 */
            "snapscreenUrlPrefix" => "", /* 图片访问路径前缀 */
            "snapscreenInsertAlign" => "none", /* 插入的图片浮动方式 */

            /* 上传视频配置 */
            "videoActionName" => "uploadvideo", /* 执行上传视频的action名称 */
            "videoFieldName" => $fileConfig['fileFieldName'], /* 提交的视频表单名称 */
            "videoPathFormat" => $fileConfig['filePathFormat'], /* 上传保存路径,可以自定义保存路径和文件名格式 */
            "videoUrlPrefix" => "", /* 视频访问路径前缀 */
            "videoMaxSize" => $fileConfig['fileMaxSize'], /* 上传大小限制，单位B，默认100MB */
            "videoAllowFiles" => $fileConfig['fileAllowFiles'], /* 上传视频格式显示 */

            /* 上传文件配置 */
            "fileActionName" => "uploadfile", /* controller里,执行上传视频的action名称 */
            "fileFieldName" => $fileConfig['fileFieldName'], /* 提交的文件表单名称 */
            "filePathFormat" => $fileConfig['filePathFormat'], /* 上传保存路径,可以自定义保存路径和文件名格式 */
            "fileUrlPrefix" => "", /* 文件访问路径前缀 */
            "fileMaxSize" => $fileConfig['fileMaxSize'], /* 上传大小限制，单位B，默认50MB */
            "fileAllowFiles" => $fileConfig['fileAllowFiles'], /* 上传文件格式显示 */
        ];
        parent::initialize();

    }

    public function index()
    {

        $action = $_GET['action'];
        switch ($action) {
            case 'config':
                $result = json_encode($this->config);
                echo $result;exit;
                break;

            /* 上传图片 */
            case 'uploadimage':
            /* 上传视频 */
            case 'uploadvideo':
            /* 上传文件 */
            case 'uploadfile':

                /**
                 * 得到上传文件所对应的各个参数,数组结构
                 * array(
                 *     "state" => "",          //上传状态，上传成功时必须返回"SUCCESS"
                 *     "url" => "",            //返回的地址
                 *     "title" => "",          //新文件名
                 *     "original" => "",       //原始文件名
                 *     "type" => ""            //文件类型
                 *     "size" => "",           //文件大小
                 * )
                 */

                /* 返回数据 */
                echo json_encode($up->getFileInfo());
                break;

            default:
                $result = json_encode(array(
                    'state' => '请求地址出错',
                ));
                break;
        }
    }
}
